package pilha;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Test;

public class PilhaVectorTest {
	@Test
	public void testIsEmpty(){
		Pilha pilha = new PilhaVector();
		assertTrue(pilha.isEmpty());
		
		pilha.push("oi");
		assertFalse(pilha.isEmpty());
		
		pilha.pop();
		assertTrue(pilha.isEmpty());
		
	}
	
	@Test
	public void testSize(){
		Pilha pilha = new PilhaVector();
		assertEquals(0, pilha.size());
		pilha.push("oi");
		assertEquals(1, pilha.size());
		pilha.pop();
		assertEquals(0, pilha.size());
	}
	
	@Test
	public void testPush(){
		Pilha pilha = new PilhaVector();
		int objeto = 1;
		int resultadoEsperado = 1;
		pilha.push(objeto);
		assertEquals(resultadoEsperado, pilha.top());
		
		String esperado = "um";
		pilha.push(esperado);
		assertEquals(esperado, pilha.top());
	}
	
	@Test
	public void testPop(){
		Pilha pilha = new PilhaVector();
		int resultadoEsperado;
		pilha.push(1);
		pilha.push(2);
		resultadoEsperado = (int) pilha.pop();
		assertEquals(resultadoEsperado, 2);		
		assertEquals(1, pilha.pop());	
		
		
	}
		
	
	@Test
	public void testPushPop(){
		Pilha pilha = new PilhaVector();
		int objeto = 1;
		int objeto2 = 2;
		pilha.push(objeto);
		assertEquals(objeto, pilha.pop());
		pilha.push(objeto2);
		assertEquals(objeto2, pilha.pop());	
		
	}
	
	@Test
	public void testTop(){
		Pilha pilha = new PilhaVector();
		int objeto = 1;
		int objeto1 = 2;
		pilha.push(objeto);
		pilha.push(objeto1);
		assertEquals(objeto1, pilha.top());
		pilha.pop();
		assertEquals(objeto, pilha.top());

	}
	
	@Test(expected=PilhaVaziaExcecao.class)
	public void testExcecaoPop(){
		Pilha pilha = new PilhaVector();
		pilha.pop();
	}
	
	@Test(expected=PilhaVaziaExcecao.class)
	public void testExcecaoTop(){
		Pilha pilha = new PilhaVector();
		pilha.top();
	}
	
}
